import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

/*
    Map接口中常用方法
        1、Map和Collection没有继承关系
        2、Map集合以key和value的方式存储数据
            key和value都是引用数据类型
            key和value都是存储对象的内部地址
            key起主导作用
        3、Map接口中常用方法
            V put(K key, V value) 向Map集合中添加键值对
            V get(Object key) 通过key获取vaule
            void clear() 清空Map结合
            boolean	containsKey(Object key) 判断Map中是否包含某个key
            boolean	containsValue(Object value)  判断Map中是否包含某个value
            boolean	isEmpty()  判断Map集合中元素个数是否为0
            Set<K> keySet() 获取Map集合所有的key(所有的键是一个set集合)
            V remove(Object key) 通过key删除键值对
            int	size() 获取Map集合中键值对的个数
            Collection<V> values() 获取Map集合中所有的value，返回一个Collection

            Set<Map.Entry<K,V>>	entrySet() 将Map集合转换成Set集合
                假设有一个Map集合，如下：
                    map1集合对象
                    key             value
                    ----------------------
                    1               zhangsan
                    2               lisi
                    3               wangwu
                    4               zhaoliu

                    Set set = map1.entrySet()
                    set集合对象
                    1=zhangsan          Map集合通过entrySet()转换成的这个Set集合，Set集合中元素的类型是Map.Entry<K,V>
                    2=lisi              Map.Entry和String一样，都是一种类型的名字，只不过Map.Entry是静态内部类，是Map中的静态内部类
                    3=wangwu
                    4=zhaoliu

 */
public class MapTest01 {
    public static void main(String[] args) {
        //第一种方式：获取所有的key，通过遍历key来遍历value
        Map<Integer,String> map = new HashMap<>();
        map.put(1,"文");
        map.put(2,"文梦");
        map.put(3,"文梦甜");
        map.put(4,"文梦甜甜");

        //获取所有的key
        Set<Integer> keys = map.keySet();

        //迭代器
/*        Iterator<Integer> it = keys.iterator();
        while(it.hasNext()){
            Integer i = it.next();
            String value = map.get(i);
            System.out.println(i + "=" + value);
        }*/
        //foreach
        for (Integer integer : keys) {
            System.out.println(map.get(integer));
        }

        //第二种方式：调用 Set<Map.Entry<K,V>> entrySet()方法
        Set<Map.Entry<Integer,String>> set = map.entrySet();

        //迭代器
        Iterator<Map.Entry<Integer,String>> it = set.iterator();
        while (it.hasNext()){
            Map.Entry<Integer,String> node = it.next();
            Integer i = node.getKey();
            String s = node.getValue();
            System.out.println(i + s);
        }

        //foreach
        for ( Map.Entry<Integer,String> node: set) {
            System.out.println(node.getKey() + node.getValue());

        }


    }
}
